import express from 'express'
import bodyParser from 'body-parser'
import cors from 'cors'
import dotenv from 'dotenv'
import { sequelize } from './models/index.js'
import { testConnection, syncDatabase } from '../config/db.js'
import articleRouter from './routes/article.js'
import authRouter from './routes/auth.js'

// 加载环境变量
dotenv.config()

const app = express()

// 中间件
app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use('/uploads', express.static('uploads'))

// 数据库连接和同步
const initializeDatabase = async () => {
  try {
    // 测试数据库连接
    const isConnected = await testConnection()
    if (!isConnected) {
      console.error('无法连接到数据库，请检查配置')
      process.exit(1)
    }

    // 同步数据库模型
    await syncDatabase()
  } catch (error) {
    console.error('数据库初始化失败:', error)
    process.exit(1)
  }
}

// 初始化数据库
initializeDatabase()

// 路由
app.get('/', (req, res) => {
  res.json({
    message: 'Blog backend API running.',
    status: 'success',
    timestamp: new Date().toISOString()
  })
})

app.use('/api/articles', articleRouter)
app.use('/api', authRouter)

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error('服务器错误:', err)
  res.status(500).json({
    message: '服务器内部错误',
    error: process.env.NODE_ENV === 'development' ? err.message : {}
  })
})

// 404 处理
app.use('*', (req, res) => {
  res.status(404).json({
    message: '接口不存在',
    path: req.originalUrl
  })
})

const PORT = process.env.PORT || 3000
app.listen(PORT, () => {
  console.log(`🚀 服务器运行在 http://localhost:${PORT}`)
  console.log(`📊 环境: ${process.env.NODE_ENV || 'development'}`)
})
